package chances.webui.model;

import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Tree<T> {
	Map<String, TreeNode<T>> allNodes = new LinkedHashMap<String, TreeNode<T>>();

	
	
	public Tree(List<TreeNode<T>> nodes) {
		nodes.stream().forEach(s->{allNodes.put(s.getId(), s);});
		buildTree();
	}

	public Collection<TreeNode<T>> getAllNodes() {
		return allNodes.values();
	}

	protected void buildTree() {
		allNodes.values().forEach(s -> {
			String parentId = s.getParentId();
			TreeNode<T> treeNode = this.allNodes.get(parentId);
			if (treeNode != null) {
				treeNode.addChild(s);
			}
		});
	}

	public TreeNode<T> getNodeById(String id) {
		return allNodes.get(id);
	}

	public List<TreeNode<T>> getRootNodes() {
		return allNodes.values().stream().filter(s -> {
			return s.getParentId()==null || "0".equals(s.getParentId())|| (s.getId().equals(s.getParentId()) );
		}).collect(Collectors.toList());
	}
	
	public void clearEmptyNode() {
		  allNodes.values().stream().filter(s->{
			return (!s.hasChild()) && (!s.isLeaf()) ;
		}).forEach(s->{
			allNodes.remove(s.getId());
			if(s.getParent()!=null){
				s.getParent().getChildren().remove(s);
			}
		});
	}

}
